// app.js - 小程序全局JS
App({
  onLaunch() {
    // 小程序初始化逻辑（对应Vue的created/mounted）
    console.log('小程序启动了')
    
    // 检查用户登录状态
    const isAuthenticated = wx.getStorageSync('isAuthenticated') || false
    this.globalData.isAuthenticated = isAuthenticated
    
    // 获取用户角色
    const userRole = wx.getStorageSync('userRole') || 'user'
    this.globalData.userRole = userRole
    
    // 设置页面权限配置
    this.initPagePermissions()
    
    // 添加全局导航守卫
    this.addNavigationGuard()
  },

  onShow() {
    // 小程序显示时的逻辑
  },

  onHide() {
    // 小程序隐藏时的逻辑
  },

  // 初始化页面权限配置
  initPagePermissions() {
    this.globalData.pagePermissions = {
      'pages/index/index': ['user', 'admin'],
      'pages/Transaction/transaction': ['user', 'admin'],
      'pages/Message/message': ['user', 'admin'],
      'pages/user/user': ['user', 'admin'],
      'pages/analysis/analysis': ['admin'],
      'pages/tenant/tenant': ['admin'],
      'pages/myProducts/myProducts': ['user', 'admin'],
      'pages/Product/product': ['user', 'admin'],
      'pages/login/login': ['user', 'admin'],
      'pages/logs/logs': ['admin']
    }
  },
  
  // 添加全局导航守卫
  addNavigationGuard() {
    // 保存原始导航方法
    const originalNavigateTo = wx.navigateTo
    const originalSwitchTab = wx.switchTab
    const originalRedirectTo = wx.redirectTo
    const originalReLaunch = wx.reLaunch
    
    // 重写navigateTo方法，增加权限检查
    wx.navigateTo = (options) => {
      if (this.checkPagePermission(options.url)) {
        originalNavigateTo(options)
      } else {
        this.handleUnauthorized()
      }
    }
    
    // 重写switchTab方法，增加权限检查
    wx.switchTab = (options) => {
      if (this.checkPagePermission(options.url)) {
        originalSwitchTab(options)
      } else {
        this.handleUnauthorized()
      }
    }
    
    // 重写redirectTo方法，增加权限检查
    wx.redirectTo = (options) => {
      if (this.checkPagePermission(options.url)) {
        originalRedirectTo(options)
      } else {
        this.handleUnauthorized()
      }
    }
    
    // 重写reLaunch方法，增加权限检查
    wx.reLaunch = (options) => {
      if (this.checkPagePermission(options.url)) {
        originalReLaunch(options)
      } else {
        this.handleUnauthorized()
      }
    }
  },
  
  // 检查页面权限
  checkPagePermission(url) {
    // 如果未登录，只允许访问登录页
    if (!this.globalData.isAuthenticated && !url.includes('/pages/login/login')) {
      wx.redirectTo({ url: '/pages/login/login' })
      return false
    }
    
    // 提取页面路径
    const pagePath = url.split('?')[0].replace(/^\//, '')
    const userRole = this.globalData.userRole
    
    // 如果页面没有在权限列表中，默认放行
    if (!this.globalData.pagePermissions[pagePath]) {
      return true
    }
    
    // 检查用户是否有权限访问
    return this.globalData.pagePermissions[pagePath].includes(userRole)
  },
  
  // 处理无权限访问
  handleUnauthorized() {
    wx.showToast({
      title: '您没有权限访问该页面',
      icon: 'none',
      duration: 2000
    })
    
    // 导航回首页或上一页
    setTimeout(() => {
      wx.navigateBack({
        fail: () => {
          wx.switchTab({
            url: '/pages/index/index'
          })
        }
      })
    }, 1000)
  },

  // 更新用户角色
  updateUserRole(role) {
    // 更新全局数据
    this.globalData.userRole = role
    // 持久化存储
    wx.setStorageSync('userRole', role)
    
    // 如果存在角色变更监听器，则调用
    if (typeof this.watchUserRole === 'function') {
      this.watchUserRole()
    }
  },

  // 全局数据（相当于Vuex的状态）
  globalData: {
    userInfo: null,
    isAuthenticated: false,
    userRole: 'user', // 默认为普通用户
    pagePermissions: {} // 页面权限配置
  }
}) 